package com.unitd.scheduler.registry;

import com.unitd.scheduler.model.JobConfig;

import java.util.Date;
import java.util.List;

/**
 * @desc 定时任务执行控制接口
 * @filename JobRegistry.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2016/10/10
 */
public interface IJobRegistry {

	/**
	 * @desc 向一致性服务端(zookeeper/redis)注册定时服务
	 * @param conf 定时任务配置信息
	 */
	void register(JobConfig conf);

	/**
	 * @desc 获取所有的定时任务配置信息
	 * @return 定时任务配置信息列表
	 */
	List<JobConfig> getAllJobs();

	/**
	 * @desc 根据指定的定时任务名称获取该定时任务的配置信息
	 * 如果时强制从远程一致性服务端(zookeeper/redis)获取,则需要重新同步远程与本地服务的定时任务配置信息之后再返回
	 * @param jobName 定时任务名称
	 * @param forceRemote 是否强制从远程的一致性服务端(zookeeper/redis)获取和同步
	 * @return JobConfig
	 */
	JobConfig getConf(String jobName, boolean forceRemote);

	/**
	 * @desc 更新定时任务的配置信息
	 * @param conf 定时任务配置信息
	 */
	void updateJobConfig(JobConfig conf);

	/**
	 * @desc 设置需要运行的定时任务
	 * @param jobName 定时任务名称
	 * @param fireTime 首次启动时间
	 */
	void setRuning(String jobName, Date fireTime);

	/**
	 * @desc 停止定时任务
	 * @param jobName 定时任务名称
	 * @param nextFireTime 下次启动时间
	 * @param errorMsg     异常消息
	 */
	void setStoping(String jobName, Date nextFireTime, String errorMsg);

	/**
	 * @desc 从一致性服务端(zookeeper/redis)中将注册定时服务删除
	 * @param jobName 定时任务名称
	 */
	void unregister(String jobName);

	/**
	 * @desc 从一致性服务端(zookeeper/redis)中将指定路径下的已注册的定时任务删除
	 */
	void onRegistered();
}